#include<iostream>
using namespace std;
int main()
{
    int a;
    cin >> a;
    int i, l;
    int k = 1;
    for (i = 0; i < a; i++)
    {
        k *= 10;
        for (l = 1; l < k; l++)
            cout <<" "<<l;

    }



}
typedef struct {

    int* a;

    int front;

    int rear;

    int  k;



} MyCircularQueue;





MyCircularQueue* myCircularQueueCreate(int k)

{

    MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));

    obj->a = (int*)malloc(sizeof(int) * (k + 1));

    obj->front = obj->rear = 0;

    obj->k = k;

    return obj;

}

bool myCircularQueueIsEmpty(MyCircularQueue* obj)

{
    return obj->front == obj->rear;



}



bool myCircularQueueIsFull(MyCircularQueue* obj) {

    return (obj->rear + 1) % (obj->k + 1) == obj->front;



}



bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {

    if (myCircularQueueIsFull(obj))



        return false;

    obj->a[obj->rear] = value;

    obj->rear++;

    obj->rear %= (obj->k + 1);

    return true;

}



bool myCircularQueueDeQueue(MyCircularQueue* obj) {

    if (myCircularQueueIsEmpty(obj))



        return false;





    ++obj->front;

    obj->front %= (obj->k + 1);

    return true;

}



int myCircularQueueFront(MyCircularQueue* obj) {

    if (myCircularQueueIsEmpty(obj))



        return -1;



    else

        return obj->a[obj->front];



}



int myCircularQueueRear(MyCircularQueue* obj) {

    if (myCircularQueueIsEmpty(obj))

        return -1;



    else

        return  obj->a[(obj->rear + obj->k) % (obj->k + 1)];



}





void myCircularQueueFree(MyCircularQueue* obj) {

    free(obj->a);

    free(obj);